package com.aos.dao;

import com.aos.dto.PermissionDto;
import com.aos.entity.Permission;
import com.aos.entity.Role;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @ClassName PermissionDao
 * @Description:权限
 * @Author wumingwang
 * @Date 2018/9/5 17:01
 * @Version 1.0
 */
public interface PermissionDao {

    /**
     * 分页查询
     * @param map
     * @return
     */
    List<PermissionDto> queryByPage(Map<String,Object> map);

    /***
     * 新增数据
     * @param permission
     * @return
     */
    Integer insert(Permission permission);

    /**
     * 更新
     * @param permission
     * @return
     */
    Integer update(Permission permission);

    /**
     * 删除
     * @param id
     * @return
     */
    Integer delete(Long id);

    /**
     * 查询重复资源
     * @param permission
     * @return
     */
    PermissionDto queryForCheckByCodeAndAppId(Permission permission);

    /**
     * 根据ID查询数据
     * @param id
     * @return
     */
    Permission queryById(Long id);

    /**
     * 根据ID查询详情
     * @param id
     * @return
     */
    PermissionDto queryDetailsById(Long id);

    /**
     * 根据应用ID查询菜单列表
     * @param applicationId
     * @param permissionType
     * @return
     */
    List<PermissionDto> queryListByAppId(@Param("applicationId") Long applicationId,@Param("permissionType") Integer permissionType);

    /**
     * 查询角色所属应用的所有菜单和改角色拥有的菜单
     * @param appId
     * @param roleId
     * @return
     */
    List<PermissionDto> queryListByAppIdAndRoleId(@Param("appId") Long appId,@Param("roleId") Long roleId);

    /**
     * 根据应用用户ID查询所有菜单
     * @param userId
     * @param appCode
     * @return
     */
    List<PermissionDto> queryByAppUserId(@Param("userId") Long userId,@Param("appCode") String appCode);

    /**
     * 根据用户ID和应用ID查询所有权限url
     * @param userId
     * @return
     */
    Set<String> queryPermissionUrls(@Param("userId") Long userId);
}
